﻿/*
模态对话框和非模态对话框
（1）模态对话框就是在我们没有关闭当前窗口之前，不能再与同一个应用程序的其他窗口进行交互（例如，新建项目时弹窗的对话框）。
要想使一个窗口作为模态窗口显示的话，调用exec()函数显示窗口。
（2）非模态对话框是既可以与当前窗口交互，也可以与同一程序中的其他窗口进行交互操作。
要显示非模态对话框，可以使用show()函数。

显示模态对话框的两种方式：
（1）调用exec()函数
（2）setModal(true) + show()函数
Qt提供了一些常用的对话框类型，它们全部继承自QDialog类，并增加了自己的特色功能，
例如消息对话框、文件对话框、颜色对话框、进度对话框等。
QMessageBox是Qt中常用的一个类，可以生成各种用途的消息对话框。
QFileDialog文件对话框用于选择文件
QColorDialog颜色选择对话框

*/


#include "Qt5DialogApp.h"
#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>
#include <QColorDialog>
#include <QProgressDialog>

Qt5DialogApp::Qt5DialogApp(QWidget *parent)
    : QDialog(parent)
{
	this->setWindowTitle(QStringLiteral("对话框程序"));
    ui.setupUi(this);
	cout<<endl;
}

Qt5DialogApp::~Qt5DialogApp()
{}

void Qt5DialogApp::on_btnModal_clicked()
{
	QDialog dlg(this);
	// 设置窗口标题
	dlg.setWindowTitle(QStringLiteral("我是模态对话框"));
	// 调整窗口大小
	dlg.resize(300, 200);
	qDebug()<<"HELLO WORLD";
	QMessageBox::information(this, QStringLiteral("赵博说"), QStringLiteral("郭李楠最帅"));
	// 显示模态对话框
	dlg.exec();
}

void Qt5DialogApp::on_btnNonModal_clicked()
{
	QDialog *dlg = new QDialog(this);
	dlg->setWindowTitle(QStringLiteral("我是非模态对话框"));
	dlg->resize(300, 200);
	QMessageBox::information(this, QStringLiteral("赵博说"), QStringLiteral("郭李楠最帅"));
	// 可以调用setModal(true)函数结合show()函数，显示模态对话框
	//dlg->setModal(true);
	dlg->show();

}

void Qt5DialogApp::on_btnMsgBox_clicked()
{
	// (1)信息对话框
	// QMessageBox::information(this, QStringLiteral("说明"), QStringLiteral("这是个information消息框"),
	//	QMessageBox::Yes | QMessageBox::No);
	// (2) 错误对话框
// 	QMessageBox::critical(this, QStringLiteral("错误"), QStringLiteral("这是个critical消息框"),
// 		QMessageBox::Yes | QMessageBox::Abort| QMessageBox::Cancel);
	//(3)warning
	 QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("这是个warn消息框"));
	//(4)question
	 QMessageBox::question(this, QStringLiteral("问题"), QStringLiteral("这是个question消息框"));
	//(5)about
	 QMessageBox::about(this, QStringLiteral("关于"), QStringLiteral("这是个about消息框"));
	//(6)aboutQt
	 QMessageBox::aboutQt(this, QStringLiteral("关于Qt"));
}

void Qt5DialogApp::on_btnFile_clicked()
{
	QString strFileName = QFileDialog::getOpenFileName(this, QStringLiteral("文件对话框"),
		"F:\\code\\85\\QtApp\\Qt5DialogApp", QStringLiteral("源文件(*.cpp);;头文件(*.h)"));
	qDebug() << strFileName;

	// 读取文件内容
	// 创建文件对象
	QFile file(strFileName);
	// 以文本方式读取文件
	file.open(QIODevice::ReadOnly | QIODevice::Text);
	// 读取文件的所有内容
	QByteArray byteContent = file.readAll();
	QString strContent = byteContent;
	// 弹窗显示读取的文件内容
	QMessageBox::information(this, "code", strContent);
	file.close();
	// 作业： 复习C++读写文件代码，学习QFile写文件的方法及QTextStream读取文件的方法

}

void Qt5DialogApp::on_btnColor_clicked()
{
    // 显示颜色选择窗口方式一： QColorDialog::ShowAlphaChannel 显示alpha选项
	//QColor color = QColorDialog::getColor(Qt::red, this, QStringLiteral("颜色对话框"), QColorDialog::ShowAlphaChannel);
	//qDebug() << color;

	// 显示颜色选择窗口方式二
	QColorDialog dialog(Qt::green, this);
	dialog.setOption(QColorDialog::ShowAlphaChannel);
	dialog.exec();
	// 获取当前选择的颜色
	QColor c = dialog.currentColor();
	qDebug() << c;
}

void Qt5DialogApp::on_btnProgress_clicked()
{
	// 参数1是描述进度条的作用，参数2取消按钮显示的文本，参数3和参数4是进度条的最小值和最大值，参数5父窗口
	QProgressDialog dialog(QStringLiteral("计算进度"),QStringLiteral("取消"),0,5000,this);
	dialog.resize(300, 50);
	dialog.setWindowTitle(QString::fromLocal8Bit("进度对话框"));
	//dialog.setWindowModality(Qt::WindowModal);
	// exec显示模态窗体，窗口为关闭不能执行下面的for循环代码
	//dialog.exec();
	dialog.show();
	for (int i =0; i<5000;i++)
	{
		// 循环给窗口上面的进度条设置值
		dialog.setValue(i);
		// 开启事件循环，避免界面频繁刷新不能显示进度条
		QCoreApplication::processEvents();
		if (dialog.wasCanceled())
		{
			break;
		}
	}
	dialog.setValue(5000);

}

void Qt5DialogApp::on_btnShowText_clicked()
{
	QMessageBox::question(this, QStringLiteral("新窗口"), QStringLiteral("提示信息，分支合并"));
}

void Qt5DialogApp::on_btnSubmit_clicked()
{
	QMessageBox::question(this, QStringLiteral("提交"), QStringLiteral("Very good"));
	// dln 增加求和
	QMessageBox::question(this, QStringLiteral("提交2"), QStringLiteral("Very good2"));
// dln 增加求和
	int num1 = 10;
	int num2 = 20;
	QString strSum = QString::number(num1) + QString::number(num2);
	ui.labelSum->setText(strSum);
	QMessageBox::information(this, QStringLiteral("求和"), strSum);

	
	QMessageBox::question(this, QStringLiteral("提交"), QStringLiteral("提交按钮"));
	//GLN
	QMessageBox::question(this, QStringLiteral("声明"), QStringLiteral("赵博最帅"));
	
	//qyx 新增计算窗口
	QMessageBox::question(this, QStringLiteral("!!"), QStringLiteral("1+1 = 2"));
	// jpc
	this->setStyleSheet("#btnSubmit{background: blue;color: #fff;}");

	
	QMessageBox::question(this, QStringLiteral("李峰"), QStringLiteral("李峰已经提交了无数遍了"));
	qDebug() << QStringLiteral("你好王五") << endl;
QMessageBox::question(this, QStringLiteral("李峰"), QStringLiteral("李峰已经提交了无数遍了1111111"));
}

void Qt5DialogApp::on_btnJyw_clicked()
{
	QMessageBox::information(this, QStringLiteral("提交"), QStringLiteral("合并，解决冲突"));
}

void Qt5DialogApp::on_btnQPushButton_clicked()
{
	QMessageBox::information(this, QStringLiteral("提交"), QStringLiteral("qyx提交按钮"));
}

void Qt5DialogApp::on_btnMulBranch_clicked()
{
	QMessageBox::question(this, QStringLiteral("多分支"), QStringLiteral("多分支"));
}
